<template>
    <el-card>
<div>
        <!-- 头顶 -->
        <el-breadcrumb separator="/" class="a">
            <!-- :to="{ path: '/users' }"  跳转 -->
            <el-breadcrumb-item :to="{ path: '/users' }">首页</el-breadcrumb-item>
            <el-breadcrumb-item>商品管理</el-breadcrumb-item>
            <el-breadcrumb-item>分类参数</el-breadcrumb-item>
        </el-breadcrumb>
        <el-form :inline="true" :model="params" class="demo-form-inline">
            <el-form-item>
                <el-button type="primary" @click="onAdd" >添加分类</el-button>
            </el-form-item>     
        </el-form>
        
        
        
        <!-- 表格区域 -->
        <!-- data 表格各行的数据 Array -->
        <!-- columns 表格各列的配置 Array -->
        <!-- selection-type 是否为多选类型表格 Boolean -->
        <!-- expand-type 是否为展开行类型表格（为 True 时，需要添加名称为 '$expand' 的作用域插槽, 它可以获取到 row, rowIndex) Boolean -->
        <!-- show-index 是否显示数据索引  Boolean -->
        <!-- show-row-hover 鼠标悬停时，是否高亮当前行 Boolean-->
        <tree-table :data='fenleiList' :columns='columns' :selection-type='false' :expand-type='false' border show-index :show-row-hover='false'>
            <!-- 作用域插槽 -->
            <!-- slot 作用域插槽名称 -->
            <!-- 是否有效 -->
            <template slot="isok" slot-scope="scope"> 
                <i class="el-icon-success" v-if="scope.row.cat_deleted === false" style="color: lightgreen;"></i>
                <i class="el-icon-error" v-else style="color: red;"></i>
            </template>
            <!-- 排序 -->
            <template slot="order" slot-scope="scope">
                <el-tag size="mini" v-if="scope.row.cat_level === 0 ">一级</el-tag>
                <el-tag size="mini" type="success" v-else-if="scope.row.cat_level === 1">二级</el-tag>
                <el-tag size="mini" type="warning" v-else>三级</el-tag>
            </template>
            <!-- 操作 -->
                <template slot="opt" slot-scope="scope">
                <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleEdit(scope.row)">编辑</el-button>
                <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(scope.row)">删除</el-button>
            </template>
        </tree-table>


        <!-- 添加  -->
        <!-- 如果提示框不显示就在el-dialog中加：:append-to-body="true" -->
        <el-dialog
            title="添加分类"
            :visible.sync="dialogVisible"
            width="30%" :append-to-body="true" @close="addCateDialogClosed">
        <el-form ref="addCateRef" :model="addCateForm" label-width="80px" status-icon :rules="rules">
            <el-form-item label="分类名称" prop="username">
                <el-input v-model="addCateForm.cat_name"></el-input>
            </el-form-item>

            <el-form-item label="父级分类">
                <!-- Cascader 级联选择器 -->
                <!-- expand-trigger 次级菜单的展开方式 string click / hover -->
                <!-- options 指定数据源，键名可通过 props 属性配置  array -->
                <!-- props 用来指定配置对象 -->
                <!-- v-model 绑定值 boolean / string / number -->
                <!-- @change 当绑定值变化时触发的事件  当前值 -->
                <!-- clearable 是否支持清空选项 boolean -->
                <!-- change-on-select 是否允许选择任意一级的选项 boolean -->
                <el-cascader
                    expand-trigger="hover"
                    :options="parentCateList"
                    :props="cascaderProps"
                    v-model="selectedKeys"
                    @change="parentCateChanged"
                    clearable
                    :change-on-select='true
                    '>
                </el-cascader>
            </el-form-item>

        </el-form>
            <span slot="footer" class="dialog-footer">
                <el-button @click="dialogVisible = false">取 消</el-button>
                <el-button type="primary" @click="onAddUser">确 定</el-button>
            </span>
        </el-dialog>
    
        <!-- current-page当前页
            page-size：每页记录数
            page-sizes：每页记录数下拉列表，第一个数与每页记录数必须一致
            total：总记录数 -->
        <el-pagination
            background
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="params.pagenum"
            :page-sizes="[1,5, 30, 50]"
            :page-size="params.pagesize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
            >
        </el-pagination>
        <!-- 编辑 -->
        <el-dialog
            :visible.sync="dialogVisibles"
            width="30%">
            <el-form ref="customform" :model="bianJI" label-width="80px"
                                    status-icon :rules="rules">
                <el-form-item label="分类名称" prop="username">
                    <el-input v-model="bianJI.cat_name"></el-input>
                </el-form-item>
            </el-form>
            <span slot="footer" class="dialog-footer">
                <el-button @click="dialogVisibles = false">取 消</el-button>
                <el-button type="primary" @click="onUpdUser">编 辑</el-button>
            </span>
        </el-dialog>
    </div>
</el-card>
</template>

<script>

export default {
   
    data(){
        return{
            // 添加分类的表单数据对象
            addCateForm: {
                // 将要添加的分类名称
                cat_name: '',
                // 父级分类的Id 
                cat_pid: 0,
                // 分类等级，默认要添加的是1级分类
                cat_level: 0
            },
            // 父级分类的列表数据 （级联选择器）
            parentCateList: [],
            // 指定级联选择器的配置对象
            cascaderProps: {
                // 选项的值
                value: 'cat_id',
                // 选项标签 显示的值
                label: 'cat_name',
                // 选项的子选项 （父子嵌套）
                children: 'children'
            },
            // 选中的父级分类的Id数组
            selectedKeys: [],
            // 父级分类的列表数据 （级联选择器）
            parentCateList: [],
            // 指定级联选择器的配置对象
            cascaderProps: {
                // 选项的值
                value: 'cat_id',
                // 选项标签 显示的值
                label: 'cat_name',
                // 选项的子选项 （父子嵌套）
                children: 'children'
            },
            //列表渲染
            columns: [
                {
                    label: '分类名称',
                    prop: 'cat_name'
                },
                {
                    label: '是否有效',
                    // 表示，将当前列定义为模板列
                    type: 'template',
                    // 表示当前这一列使用模板名称
                    template: 'isok'
                },
                {
                    label: '排序',
                    // 表示，将当前列定义为模板列
                    type: 'template',
                    // 表示当前这一列使用模板名称
                    template: 'order'
                },
                {
                    label: '操作',
                    // 表示，将当前列定义为模板列
                    type: 'template',
                    // 表示当前这一列使用模板名称
                    template: 'opt'
                }
            ],

            fenleiList:[],
            bianJI:[],
            roleId:0,
            params:{
                cat_pid:'',
                cat_deleted:'',
                pagenum:1,
                pagesize:5

            },
            
            // addCateForm:{
            //     cat_pid:'',
            //     cat_name:'',
            //     cat_level:''
            // },
            rules:{

            },
            total:0,
            dialogVisible:false,
            dialogVisibles:false,
            dialogVisibless:false,
    }},
    methods:{
        // 监听 添加分类对话框 关闭事件，重置表单数据
        addCateDialogClosed() {
            // 通过resetFields() 重置表单数据
            this.$refs.addCateRef.resetFields();
            // 将 级联选择器 绑定的数组 重置为空数组
            this.selectedKeys = [];
            this.addCateForm.cat_name = 0;
            this.addCateForm.cat_pid = 0;
            this.addCateForm.cat_level = 0;
        },
        //添加
        onAdd(){
            this.getParentCateList();
            this.dialogVisible=true;
        },
        // 点击按钮，添加新的分类
        async onAddUser() {
            // 预验证表单数据
            this.$refs.addCateRef.validate( async valid => {
            // 如果内容为空，不发送请求
            if(!valid) return

            // 验证通过，发送请求
            const ret = await this.$http.post("/api/private/v1/categories", this.addCateForm);

            if (ret.meta.status!=201) {
                return this.$message.error(ret.meta.msg)
            }
            this.$message.success(ret.meta.msg)
            // 刷新数据列表
            this.initTable();
            // 关闭对话框
            this.dialogVisible=false;
            });
        },
        // 选择项发生变化触发这个函数
        parentCateChanged() {
            console.log(this.selectedKeys);

        // 如果 selectedKeys 数组中的 length 大于 0， 证明选中的父级分类
        // 反之，就说明没有选中任何父级分类
        if(this.selectedKeys.length > 0) {
            // 父级分类的Id
            this.addCateForm.cat_pid = this.selectedKeys[this.selectedKeys.length - 1 ]

            // 为当前分类的等级赋值
            this.addCateForm.cat_level = this.selectedKeys.length
            return
        }else {
            this.addCateForm.cat_name = 0;
            // 父级分类的Id
            this.addCateForm.cat_pid = 0
            // 为当前分类的等级赋值
            this.addCateForm.cat_level = 0
        }

        },
        // 获取父级分类的数据列表（级联选择器）
        async getParentCateList() {
            // type: 2 只获取 前两级
            const res = await this.$http.get("/api/private/v1/categories", {params: {type: 2 }});

            if (res.meta.status!=200) {
                    return this.$message.error(res.meta.msg)
                }
                this.$message.success(res.meta.msg)

            this.parentCateList = res.data;
            console.log(res.data);
        },
        
        //删除
        async handleDelete(_id){
            if (confirm('确定永久删除吗?')) {
                let  a= await this.$http.delete(`/api/private/v1/categories/${_id.cat_id}`);
                this.initTable();
            } 
        },
        //编辑更新
        async onUpdUser(){
            let {data}=await this.$http.put(`/api/private/v1/categories/${this.bianJI.cat_id}`,
            {"cat_name":this.bianJI.cat_name});
            this.initTable();
            this.dialogVisibles=false;
        },
        //编辑
        handleEdit(obj){
            this.bianJI=obj;
            this.dialogVisibles=true;
        },
        //修改每页记录数
        handleSizeChange(val){
            this.params.pagesize=val*1;
            this.initTable();
        },
        //点击分页按钮
        handleCurrentChange(val){
            this.params.pagenum=val*1;
            this.initTable();   
        },
        //列表
        async initTable(){
            let {data}=await this.$http.get("/api/private/v1/categories",
            {params:this.params});
            this.fenleiList=data.result;
            // console.log(data.result);
            this.total=data.total;
        }
    },
    async mounted(){
        this.initTable();
    }
}
</script>

<style lang="scss" scoped>
        .to{
            
            display: flex;
            flex-direction: row;
            // margin-left: 20px;
        }
        .demo-form-inline{
            display: flex;
            flex-direction: row;
        }
        .a{
            width: 100%;
            height: 60px;
            background-color: #e0e5ee;
            text-align: center;
            line-height: 60px;
        }
</style>